From: kaf24@firebug.cl.cam.ac.uk Date: Mon, 14 Mar 2005 22:28:40 +0000 (+0000) Subject: bitkeeper revision 1.1159.258.55 (42361018TeYmwjC8C6haDMNI9sjHUw) X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~17400^2~117 X-Git-Url: https://dgit.raspbian.org/%22http:/www.example.com/cgi/%22https://%22%22/%22http:/www.example.com/cgi/%22https:/%22%22?a=commitdiff_plain;h=d434af3fab5785f5d64c8c84d53cce2ef7fe159b;p=xen.git bitkeeper revision 1.1159.258.55 (42361018TeYmwjC8C6haDMNI9sjHUw) Fix highmem patches to use PageHighMem instead of highmem_start_page. Signed-off-by: Keir Fraser --- diff --git a/linux-2.6.11-xen-sparse/arch/xen/i386/mm/highmem.c b/linux-2.6.11-xen-sparse/arch/xen/i386/mm/highmem.c index 7f771f81fd..1bf278733f 100644 --- a/linux-2.6.11-xen-sparse/arch/xen/i386/mm/highmem.c +++ b/linux-2.6.11-xen-sparse/arch/xen/i386/mm/highmem.c @@ -25,7 +25,7 @@ void kunmap(struct page *page) * However when holding an atomic kmap is is not legal to sleep, so atomic * kmaps are appropriate for short, tight code paths only. */ -void *kmap_atomic(struct page *page, enum km_type type) +static void *__kmap_atomic(struct page *page, enum km_type type, pgprot_t prot) { enum fixed_addresses idx; unsigned long vaddr; @@ -41,33 +41,21 @@ void *kmap_atomic(struct page *page, enum km_type type) if (!pte_none(*(kmap_pte-idx))) BUG(); #endif - set_pte(kmap_pte-idx, mk_pte(page, kmap_prot)); + set_pte(kmap_pte-idx, mk_pte(page, prot)); __flush_tlb_one(vaddr); return (void*) vaddr; } -/* Same as kmap_atomic but with PAGE_KERNEL_RO page protection */ -void *kmap_atomic_pte(struct page *page, enum km_type type) +void *kmap_atomic(struct page *page, enum km_type type) { - enum fixed_addresses idx; - unsigned long vaddr; - - /* even !CONFIG_PREEMPT needs this, for in_atomic in do_page_fault */ - inc_preempt_count(); - if (page < highmem_start_page) - return page_address(page); - - idx = type + KM_TYPE_NR*smp_processor_id(); - vaddr = __fix_to_virt(FIX_KMAP_BEGIN + idx); -#ifdef CONFIG_DEBUG_HIGHMEM - if (!pte_none(*(kmap_pte-idx))) - BUG(); -#endif - set_pte(kmap_pte-idx, mk_pte(page, PAGE_KERNEL_RO)); - __flush_tlb_one(vaddr); + return __kmap_atomic(page, type, kmap_prot); +} - return (void*) vaddr; +/* Same as kmap_atomic but with PAGE_KERNEL_RO page protection. */ +void *kmap_atomic_pte(struct page *page, enum km_type type) +{ + return __kmap_atomic(page, type, PAGE_KERNEL_RO); } void kunmap_atomic(void *kvaddr, enum km_type type) @@ -97,31 +85,6 @@ void kunmap_atomic(void *kvaddr, enum km_type type) preempt_check_resched(); } -void kunmap_atomic_force(void *kvaddr, enum km_type type) -{ - unsigned long vaddr = (unsigned long) kvaddr & PAGE_MASK; - enum fixed_addresses idx = type + KM_TYPE_NR*smp_processor_id(); - - if (vaddr < FIXADDR_START) { // FIXME - dec_preempt_count(); - preempt_check_resched(); - return; - } - - if (vaddr != __fix_to_virt(FIX_KMAP_BEGIN+idx)) - BUG(); - - /* - * force other mappings to Oops if they'll try to access - * this pte without first remap it - */ - pte_clear(kmap_pte-idx); - __flush_tlb_one(vaddr); - - dec_preempt_count(); - preempt_check_resched(); -} - struct page *kmap_atomic_to_page(void *ptr) { unsigned long idx, vaddr = (unsigned long)ptr; diff --git a/linux-2.6.11-xen-sparse/arch/xen/i386/mm/pgtable.c b/linux-2.6.11-xen-sparse/arch/xen/i386/mm/pgtable.c index 30e929ad51..6fe3f08632 100644 --- a/linux-2.6.11-xen-sparse/arch/xen/i386/mm/pgtable.c +++ b/linux-2.6.11-xen-sparse/arch/xen/i386/mm/pgtable.c @@ -232,7 +232,7 @@ struct page *pte_alloc_one(struct mm_struct *mm, unsigned long address) pte = alloc_pages(GFP_KERNEL|__GFP_HIGHMEM|__GFP_REPEAT|__GFP_ZERO, 0); if (pte == NULL) return pte; - if (pte >= highmem_start_page) + if (PageHighMem(pte)) return pte; /* not a highmem page -- free page and grab one from the cache */ __free_page(pte); @@ -247,7 +247,7 @@ void pte_free(struct page *pte) { set_page_count(pte, 1); #ifdef CONFIG_HIGHPTE - if (pte < highmem_start_page) + if (!PageHighMem(pte)) #endif kmem_cache_free(pte_cache, phys_to_virt(page_to_pseudophys(pte))); diff --git a/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/highmem.h b/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/highmem.h index 8273e2db97..e3e4a531d2 100644 --- a/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/highmem.h +++ b/linux-2.6.11-xen-sparse/include/asm-xen/asm-i386/highmem.h @@ -73,7 +73,6 @@ void kunmap(struct page *page); void *kmap_atomic(struct page *page, enum km_type type); void *kmap_atomic_pte(struct page *page, enum km_type type); void kunmap_atomic(void *kvaddr, enum km_type type); -void kunmap_atomic_force(void *kvaddr, enum km_type type); struct page *kmap_atomic_to_page(void *ptr); #define flush_cache_kmaps() do { } while (0)